#include "serial.h"

Serial::Serial() {
    serialPort = new QSerialPort();
}

Serial::~Serial() {
    if(serialPort->isOpen()) {
        serialPort->close();
    }
    delete serialPort;
}

// 获取可用串口列表
QStringList Serial::getAvailablePorts() {
    QStringList portList;
    const auto infos = QSerialPortInfo::availablePorts();
    for(const QSerialPortInfo &info : infos) {
        portList << info.portName();
    }
    return portList;
}

// 打开串口
bool Serial::openPort(const QString &portName, int baudRate) {
    if(serialPort->isOpen()) {
        serialPort->close();
    }

    serialPort->setPortName(portName);
    serialPort->setBaudRate(baudRate);
    serialPort->setDataBits(QSerialPort::Data8);
    serialPort->setParity(QSerialPort::NoParity);
    serialPort->setStopBits(QSerialPort::OneStop);
    serialPort->setFlowControl(QSerialPort::NoFlowControl);

    return serialPort->open(QIODevice::ReadWrite);
}

// 关闭串口
void Serial::closePort() {
    if(serialPort->isOpen()) {
        serialPort->close();
    }
}

// 写数据
bool Serial::writeData(const QByteArray &data) {
    if(!serialPort->isOpen()) {
        return false;
    }
    return serialPort->write(data) != -1;
}

// 读数据
QByteArray Serial::readData() {
    if(!serialPort->isOpen()) {
        return QByteArray();
    }
    return serialPort->readAll();
}

// 判断串口是否打开
bool Serial::isOpen() {
    return serialPort->isOpen();
}

